package com.qianying.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderDTO implements Serializable  {

    /**
     * 主键
     */
    private Long id;

    /**
     * 订单状态[ 1-带勘测,2-已派师傅勘测,3-师傅已报价,4-师傅报价退回,5-师傅报价确认 ]
     */
    private String state;

    /**
     * 工单编号
     */
    private String orderNo;

    /**
     * 客户名称
     */
    private String customerName;

    /**
     * 门店代码
     */
    private String shopCode;

    /**
     * 门店简称
     */
    private String shopName;

    /**
     * 下单类型
     */
    private String orderType;

    /**
     * 下单日期
     */
    private LocalDateTime createOrderTime;

    /**
     * 下单日期
     */
    public void setCreateOrderTime(LocalDateTime createOrderTime) {
        this.createOrderTime = createOrderTime;
        this.isCreateOrderTimePresent = true; // 标记字段已传递
    }

    /**
     * 标记字段是否被传递（用于区分未传值 vs 显式 null）
     */
    @JsonIgnore
    private boolean isCreateOrderTimePresent;

    /**
     * 品牌简称
     */
    private String brandName;

    /**
     * 商圈
     */
    private String businessDistrict;

    /**
     * 结算方式
     */
    private String paymentMethod;

    /**
     * 客户单号
     */
    private String customerOrder;

    /**
     * 联系人
     */
    private String contacts;

    /**
     * 省
     */
    private String province;

    /**
     * 市
     */
    private String city;

    /**
     * 县
     */
    private String county;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 客户下单人
     */
    private String customerOrderName;

    /**
     * 客户下单人手机
     */
    private String customerPhone;

    /**
     * 门店开店日期
     */
    private LocalDateTime storeOpeningDate;

    /**
     * 门店开店日期
     */
    public void setStoreOpeningDate(LocalDateTime storeOpeningDate) {
        this.storeOpeningDate = storeOpeningDate;
        this.isStoreOpeningDatePresent = true; // 标记字段已传递
    }

    /**
     * 标记字段是否被传递（用于区分未传值 vs 显式 null）
     */
    @JsonIgnore
    private boolean isStoreOpeningDatePresent;

    /**
     * 订单需求
     */
    private  OrderRequirementsDTO requirements;

    /**
     * 勘察报价
     */
    private OrderSurveyQuotationDTO surveyQuotation;

    /**
     * 平台报价
     */
    private OrderPlatformPriceDTO platformPrice;

    /**
     * 平台派单
     */
    private OrderDispatchDTO dispatch;

    /**
     * 维修成果
     */
    private OrderRepairDTO repair;

    /**
     * 财务信息
     */
    private OrderFinanceDTO finance;
}
